"""
封装 数据库的 工具类。提供常用的 方法
"""
import pymysql


# 数据库工具类
class DBTools(object):

    # 建立连接 --- 私有方法
    @classmethod
    def __get_conn(cls):
        conn = pymysql.connect(host="211.103.136.244", port=7061, user="student",
                               password="iHRM_student_2021", database="ihrm", charset="utf8")
        return conn

    # 查询 一条记录 --- sql 是用户实际要执行的 查询语句
    @classmethod
    def select_one(cls, sql):
        conn = None
        cursor = None
        res = None
        try:
            # 调用 自己封装的 建立连接 的方法，得到一个 conn
            conn = cls.__get_conn()
            # 获取 游标
            cursor = conn.cursor()
            # 执行 用户 指定的 查询 sql
            cursor.execute(sql)
            # 获取结果
            res = cursor.fetchone()
        except Exception as err:
            print("执行SQL查询一条记录时，报错：", str(err))
        finally:
            conn.close()
            cursor.close()
            # 返回 查询结果给 用户
            return res

    # 增删改数据 --- sql 是用户实际要执行的 语句（insert/update/delete）
    @classmethod
    def uid_db(cls, sql):
        conn = None
        cursor = None
        try:
            # 调用 自己封装的 建立连接 的方法，得到一个 conn
            conn = cls.__get_conn()
            # 获取 游标
            cursor = conn.cursor()
            # 执行 用户 指定的 查询 sql
            cursor.execute(sql)
            # 提交事务
            conn.commit()
            print("Affected rows:", conn.affected_rows())
        except Exception as err:
            print("执行SQL增删改数据库，报错：", str(err))
            # 回滚事务
            conn.rollback()
        finally:
            conn.close()
            cursor.close()


if __name__ == '__main__':
    # 直接使用 类名.方法名 调用类方法。
    res = DBTools.select_one("select * from t_book;")

    # 接收的结果，打印查看
    print("res = ", res)

    # 测试 增删改 SQL
    DBTools.uid_db("delete from t_book where title = '西游记';")